package ru.st.selenium.pages;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

import static org.openqa.selenium.support.ui.ExpectedConditions.presenceOfElementLocated;

public class EditFieldsTypesObjectPage extends TypesObjectPage {

	public EditFieldsTypesObjectPage(PageManager pages) {
		super(pages);
	}
	// ЭЛЕМЕНТЫ - Форма грида редактирования полей
	// Кнопка - Добавить Поле
	@FindBy(xpath = "//a/span[contains(@id, 'button-10')]")
	private WebElement clickOkAndAddFieldTypesObgect;
	
	// Нажать кнопку Сохранить объект
	@FindBy(xpath = "//span[@id='button-1010-btnIconEl']")
	private WebElement saveObject;
	
	// ЭЛЕМЕНТЫ - Форма добавления полей
	// Ввод Названия поля
	@FindBy(id = "dialog_form_name-inputEl")
	private WebElement nameField;

	// Ввод Идентификатора поля
	@FindBy(id = "dialog_form_identifier-inputEl")
	private WebElement nameIdentifier;

	// Выбор Типа поля
	@FindBy(id = "dialog_form_type-inputEl")
	private WebElement typeField;

	// Клик "Поле:"
	@FindBy(id = "dialog_form_field-inputEl")
	private WebElement selectField;
	
	// Поле - "Шаблон нумератора:"
	@FindBy(id = "dialog_form_numerator_template-inputEl")
	private WebElement selectFieldAndInputNumerator;
	
	
	// Клик alert "Ok"
	@FindBy(xpath = "//*[@id='button-1005-btnIconEl']")
	private WebElement clicAlertOk;

	// Сохранить
	@FindBy(xpath = "//span[contains(@id,'-btnIconEl')] [ancestor::div[contains(@id,'window-')]]")
	private WebElement saveField;

	
	
	// Выбор типов полей из выпадающего списка:
	@FindBy(xpath = "//li[text()='Текст']")
	private WebElement typeFieldText;

	@FindBy(xpath = "//li[text()='Целое']")
	private WebElement typeFieldСheloe;

	@FindBy(xpath = "//li[text()='Вещественное']")
	private WebElement typeFieldVesh;

	@FindBy(xpath = "//li[text()='Дата']")
	private WebElement typeFieldData;

	@FindBy(xpath = "//li[text()='Файл']")
	private WebElement typeFieldFile;

	@FindBy(xpath = "//li[text()='Cсылка на справочник']")
	private WebElement typeFieldDictionary;
	
	@FindBy(xpath = "//li[contains(text(),'Множественная ссылка на справочник')]")
	private WebElement typeFieldMultipleDictionary;
	
	@FindBy(xpath = "//li[text()='Ссылка на библиотеку']")
	private WebElement typeFieldLinkLib;
	
	@FindBy(xpath = "//li[text()='Cсылка на задачу']")
	private WebElement typeFieldLinkTask;
	
	@FindBy(xpath = "//li[text()='Нумератор']")
	private WebElement typeFieldNumerator;
	
	@FindBy(xpath = "//li[text()='Ссылка на объект']")
	private WebElement typeFieldLinkObject;
	
	@FindBy(xpath = "//li[text()='Таблица']")
	private WebElement typeFieldTable;
	
	@FindBy(xpath = "//li[text()='Логический']")
	private WebElement typeFieldlogical;
	
	@FindBy(xpath = "//li[text()='Телефон']")
	private WebElement typeFieldIphone;

	@FindBy(xpath = "//li[text()='E-mail']")
	private WebElement typeFieldEmail;

	@FindBy(xpath = "//li[text()='Изображение']")
	private WebElement typeFieldImage;

	@FindBy(xpath = "//li[text()='Цвет']")
	private WebElement typeFieldColor;
	
	
	// Атрибуты для СПРАВОЧНИКОВ:
	// Клик "Справочник:"
	@FindBy(id = "dialog_form_dictionary-inputEl")
	private WebElement typeDictionary;
	
	// Выбор названия справочника из списка
	@FindBy(xpath = "//li[text()='Банк']")
	private WebElement nameDictionary;
	
	// Выбор Названия поля справочника
	@FindBy(xpath = "//div[contains(@id,'boundlist')]//li[text()='Название']")
	private WebElement nameFieldDictionary;

	// Выбор названия мн. справочника из списка
	@FindBy(xpath = "//li[text()='Адресная книга']")
	private WebElement nameMultipleDictionary;
	
	// Выбор названия поля мн. справочника из списка
	@FindBy(xpath = "//li[text()='Фамилия']")
	private WebElement nameFieldMultipleDictionary;
	
	// Атрибуты для ТАБЛИЦА:
	// Клик поле "Таблица:"
	@FindBy(id = "dialog_form_table-inputEl")
	private WebElement fieldTable;
		
	// Выбор Таблицы из списка
	@FindBy(xpath = "//li[contains(text(),'Типы таблиц')]")
	private WebElement nameTable;

	// Выбор названия поля таблицы из списка
	@FindBy(xpath = "//li[text()='TСтрока']")
	private WebElement nameFieldTable;
	
	
	// Выбор Типа поля
	public EditFieldsTypesObjectPage selectTypeField() {
		typeField.click();
		return this;
	}

	// Добавить поле
	public EditFieldsTypesObjectPage clickAddFieldTypesObject() {
		clickOkAndAddFieldTypesObgect.click();
		return this;
	}

	// Название поля
	public EditFieldsTypesObjectPage setNameField(String text) {
		nameField.clear();
		nameField.sendKeys(text);
		return this;
	}

	// Идентификатор поля
	public EditFieldsTypesObjectPage setNameIdentifier(String text) {
		nameIdentifier.clear();
		nameIdentifier.sendKeys(text);
		return this;
	}

	// Сохранить поле
	public EditFieldsTypesObjectPage clickSaveField() {
		saveField.click();
		return this;
	}

	// Сохранить объект
	public EditFieldsTypesObjectPage clickSaveObject() {
		saveObject.click();
		return this;

	}

	// Выбор типов полей из выпадающего списка:
	// ТЕКСТ
	public EditFieldsTypesObjectPage selectTypeFieldText() {
		typeFieldText.click();
		return this;
	}

	// ЦЕЛОЕ
	public EditFieldsTypesObjectPage selectTypeFieldСheloe() {
		typeFieldСheloe.click();
		return this;
	}

	// ВЕЩЕСТВЕННОЕ
	public EditFieldsTypesObjectPage selectTypeFieldVesh() {
		typeFieldVesh.click();
		return this;
	}

	// ДАТА
	public EditFieldsTypesObjectPage selectTypeFieldData() {
		typeFieldData.click();
		return this;
	}

	// ФАЙЛ
	public EditFieldsTypesObjectPage selectTypeFieldFile() {
		typeFieldFile.click();
		return this;
	}

	// ССЫЛКА НА СПРАВОЧНИК
	public EditFieldsTypesObjectPage selectTypeFieldDictionary() {
		typeFieldDictionary.click();
		return this;
	}

	// Клик в поле "Справочник:"
	public EditFieldsTypesObjectPage selectTypeDictionary() {
		typeDictionary.click();
		return this;
	}

	// Выбор Cправочника из списка
	public EditFieldsTypesObjectPage selectNameDictionary() {
		nameDictionary.click();
		return this;
	}
	
	// Клик в поле "Поле:" справочника
	public EditFieldsTypesObjectPage selectField() {
		waitTime(1);
		selectField.click();
		return this;
	}

	// Выбор Название поля справочника из списка
	public EditFieldsTypesObjectPage selectNameFieldDictionary() {
		nameFieldDictionary.click();
		return this;
	}
	
	
	// МНОЖЕСТВЕННАЯ ССЫЛКА
	public EditFieldsTypesObjectPage selectTypeFieldMultipleDictionary() {
		typeFieldMultipleDictionary.click();
		return this;
	}
	
	// Выбор Мн. Cправочника из списка
	public EditFieldsTypesObjectPage selectNameMultipleDictionary() {
		nameMultipleDictionary.click();
		return this;
	}

	// Выбор Название поля справочника из списка
	public EditFieldsTypesObjectPage selectNameFieldMultipleDictionary() {
		nameFieldMultipleDictionary.click();
		return this;
	}

	// ЛОГИЧЕСКОЕ
	public EditFieldsTypesObjectPage selectTypeFieldlogical() {
		typeFieldlogical.click();
		return this;
	}

	// ТЕЛЕФОН
	public EditFieldsTypesObjectPage selectTypeFieldIphone() {
		typeFieldIphone.click();
		return this;
	}

	// EMAIL
	public EditFieldsTypesObjectPage selectTypeFieldEmail() {
		typeFieldEmail.click();
		return this;
	}

	// ИЗОБРАЖЕНИЕ
	public EditFieldsTypesObjectPage selectTypeFieldImage() {
		typeFieldImage.click();
		return this;
	}

	// ЦВЕТ
	public EditFieldsTypesObjectPage selectTypeFieldColor() {
		typeFieldColor.click();
		return this;
	}

	// ССЫЛКА НА БИБЛИОТЕКУ
	public EditFieldsTypesObjectPage selectTypeFieldLinkLib() {
		typeFieldLinkLib.click();
		return this;
	}

	// ССЫЛКА НА ЗАДАЧУ
	public EditFieldsTypesObjectPage selectTypeFieldLinkTask() {
		typeFieldLinkTask.click();
		return this;
	}
	
	// НУМЕРАТОР
	public EditFieldsTypesObjectPage selectTypeFieldNumerator() {
		typeFieldNumerator.click();
		return this;
	}
	
	// Выбор поля "Нумератор:" и ввод шаблона
	public EditFieldsTypesObjectPage selectFieldAndInputNumerator() {
		selectFieldAndInputNumerator.click();
		selectFieldAndInputNumerator.sendKeys("{counter}-{ISTROKA}//{DD}.{MM}.{YYYY}-Произвольный текст");
		return this;
	}

	// ССЫЛКА НА ОБЪЕКТ
	public EditFieldsTypesObjectPage selectTypeFieldLinkObject() {
		typeFieldLinkObject.click();
		return this;
	}
	
	
	// ТАБЛИЦА
	public EditFieldsTypesObjectPage selectTypeFieldTable() {
		typeFieldTable.click();
		return this;
	}

	// Клик в поле "Таблица:"
	public EditFieldsTypesObjectPage selectFieldTable() {
		fieldTable.click();
		return this;
	}

	// Выбор Таблицы из списка
	public EditFieldsTypesObjectPage selectNameTable() {
		nameTable.click();
		return this;
	}

	// Выбор названия поля таблицы из списка
	public EditFieldsTypesObjectPage selectNameFieldTable() {
		nameFieldTable.click();
		return this;
	}
	
	// Ожидание появления alert об успешном сохранении - Изменения сохранены;
    // Клик alert
	public EditFieldsTypesObjectPage clicAlertOk() {
		waitForPageUntilElementIsVisible(
			    By.xpath("//td[contains(@id,'messagebox')]/div[text()='Изменения сохранены']"), 5000);
		clicAlertOk.click();
		return this;
	}
	

	// Ожидание появления элементов на соответствующей странице
	public EditFieldsTypesObjectPage ensurePageLoaded() {
		super.ensurePageLoaded();
		wait.until(presenceOfElementLocated(By
				.xpath("//a/span[contains(@id, 'button-10')]")));
		wait.until(presenceOfElementLocated(By.id("bEditField-btnIconEl")));
		wait.until(presenceOfElementLocated(By.id("bDeleteField-btnIconEl")));
		return this;
	}



}